/**
 * 获取当前日期（YYYY-MM-DD格式）
 * @param {Date|string} date - 日期对象或YYYY-MM-DD格式字符串
 * @returns {string} 格式化后的日期字符串
 */
export const formatDate = (date = new Date(), format = 'YYYY-MM-DD') => {
    const dateObj = typeof date === 'string'
        ? new Date(date + 'T00:00:00')
        : new Date(date);

    if (isNaN(dateObj.getTime())) {
        throw new Error('Invalid date format. Use Date object or YYYY-MM-DD string');
    }

    const year = dateObj.getFullYear();
    const month = String(dateObj.getMonth() + 1).padStart(2, '0');
    const day = String(dateObj.getDate()).padStart(2, '0');

    return format
        .replace(/YYYY/g, year)
        .replace(/MM/g, month)
        .replace(/DD/g, day);
};

/**
 * 通用天数计算（YYYY-MM-DD格式）
 * @param {number} days - 需要减去的天数
 * @param {Date|string} [date=new Date()] - 可选基准日期
 * @returns {string} 计算后的日期字符串
 */
export const getDaysBefore = (days, date = new Date(), format = 'YYYY-MM-DD') => {
    const baseDate = typeof date === 'string'
        ? new Date(date + 'T00:00:00')
        : new Date(date);
    const targetDate = new Date(baseDate);
    targetDate.setDate(targetDate.getDate() - days);
    return formatDate(targetDate, format);
};

/**
 * 通用月份计算（YYYY-MM-DD格式）
 * @param {number} months - 需要减去的月份数
 * @param {Date|string} [date=new Date()] - 可选基准日期
 * @returns {string} 计算后的日期字符串
 */
export const getMonthsBefore = (months, date = new Date(), format = 'YYYY-MM-DD') => {
    const baseDate = typeof date === 'string'
        ? new Date(date + 'T00:00:00')
        : new Date(date);
    const targetDate = new Date(baseDate);
    targetDate.setMonth(targetDate.getMonth() - months);
    return formatDate(targetDate, format);
};

/**
 * 通用年份计算（YYYY-MM-DD格式）
 * @param {number} years - 需要减去的年数
 * @param {Date|string} [date=new Date()] - 可选基准日期
 * @returns {string} 计算后的日期字符串
 */
export const getYearsBefore = (years, date = new Date(), format = 'YYYY-MM-DD') => {
    const baseDate = typeof date === 'string'
        ? new Date(date + 'T00:00:00')
        : new Date(date);
    const targetDate = new Date(baseDate);
    targetDate.setFullYear(targetDate.getFullYear() - years);
    return formatDate(targetDate, format);
};

/**
 * 传入时间查询距离当前时间已经多久了（YYYY-MM-DD格式）
 * @param {Date|string} data - 传入时间
 * @returns {string} 距离当前时间的描述字符串
 */
export const timeCountdown = (data) => {
    const createTime = new Date(data)
    const now = new Date()
    const diffHours = Math.floor((now - createTime) / (1000 * 60 * 60))
    return  diffHours > 24
        ? `${Math.floor(diffHours / 24)}天前`
        : `${diffHours}小时前`
}
